
import ts from 'typescript';
import path from 'path';

// 查找并解析 tsconfig.json
function loadTsConfig(projectDir: string) {
  const configPath = ts.findConfigFile(projectDir, ts.sys.fileExists, 'tsconfig.json');

  if (!configPath) {
    throw new Error("tsconfig.json not found");
  }

  const configFile = ts.readConfigFile(configPath, ts.sys.readFile);

  if (configFile.error) {
    throw new Error(ts.flattenDiagnosticMessageText(configFile.error.messageText, '\n'));
  }

  // 解析配置（处理 extends 和路径转换）
  const parsedConfig = ts.parseJsonConfigFileContent(
    configFile.config,
    ts.sys,
    path.dirname(configPath)
  );

  if (parsedConfig.errors.length > 0) {
    throw new Error(parsedConfig.errors.map(e => e.messageText).join('\n'));
  }

  return {
    raw: configFile.config,       // 原始配置对象
    options: parsedConfig.options, // 解析后的编译选项
    fileNames: parsedConfig.fileNames // 包含的文件列表
  };
}

class TsConfig {
  value = loadTsConfig(process.cwd());
  get raw() {
    return this.value.raw;
  }
  get options() {
    return this.raw.options;
  }
  get CompileOptions() {
    return this.value.options;
  }
  get fileNames() {
    return this.value.fileNames;
  }
  get logLevel() {
    return this.options.logLevel || 'info'; // 默认日志级别为 'info'
  }
}
export const tsConfig = new TsConfig();